home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software of the Month Club 2000 October
/
Software of the Month - Ultimate Collection Shareware 277.iso
/
pc
/
PROGRAMS
/
UTILITY
/
WINLINUX
/
DATA1.CAB
/
programs_-_usrdoc
/
KBD-0.95
/
AS400.KBD
< prev
next >
Wrap
Text File
|
1999-09-17
|
16KB
|
629 lines
Edward Flottwell <edward@mudhoney.mitropa.com> wrote the following
about his kernel patch for allowing the kernel to work with an
adapted AS400 keyboard.
(In fact no kernel patch is required - the utility setkeycodes will do.
But the technical info below might be useful for somebody.)
----aeb
"Keyboard.c patch for IBM Keyboards" (Aug 9, 20:04):
> The last 2 Weekends I spent on hacking a little bit in the keyboard code to
> make a keyboard from a IBM AS400 Terminal work with LinuX. It's a very nice
> piece of hardware, 122 keys and 2 kg :-), mostly used in Banks and
> Companies. I got mine from a bank service company for 10 Marks (aprox.
> 7.5$).
>
> The patch against keyboard.c from 1.3.15 and a README is following:
>
> --------------------------------schnipp-----------------------------------
--- keyboard.1.3.15.orig Wed Aug 9 12:51:28 1995
+++ keyboard.c Wed Aug 9 13:11:56 1995
@@ -39,6 +39,11 @@
#define KBD_REPORT_ERR
#define KBD_REPORT_UNKN
/* #define KBD_IS_FOCUS_9000 */
+/* #define KBD_IS_IBM_AS400 */
+
+/* When using an original IBM AS_400 Keyboard you should enable both
+ * KBD_IS_FOCUS_9000 and KBD_IS_IBM_AS400
+ */
#ifndef KBD_DEFMODE
#define KBD_DEFMODE ((1 << VC_REPEAT) | (1 << VC_META))
@@ -228,6 +233,29 @@
#define E1_PAUSE 119
+#ifdef KBD_IS_IBM_AS400
+#define E0_GR 105
+#define E0_SIGN 43
+#define E0_LINE 108
+#define IBM_PF9 112
+#define IBM_PF10 113
+#define IBM_PF11 114
+#define IBM_PF12 115
+#define IBM_PF13 116
+#define IBM_PF14 117
+#define IBM_PF15 118
+#define IBM_PF16 120
+#define IBM_PF17 121
+#define IBM_PF18 122
+#define IBM_PF19 123
+#define IBM_PF20 124
+#define IBM_PF21 125
+#define IBM_PF22 126
+#define IBM_PF23 127
+#define IBM_PF24 119
+#endif
+
+
/*
* The keycodes below are randomly located in 89-95,112-118,120-127.
* They could be thrown away (and all occurrences below replaced by 0),
@@ -262,6 +290,7 @@
#define RGN3 126
#define RGN4 127
+#ifndef KBD_IS_IBM_AS400
static unsigned char high_keys[128 - SC_LIM] = {
RGN1, RGN2, RGN3, RGN4, 0, 0, 0, /* 0x59-0x5f */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x67 */
@@ -270,6 +299,20 @@
FOCUS_PF4, FOCUS_PF5, FOCUS_PF6, FOCUS_PF7, /* 0x78-0x7b */
FOCUS_PF8, JAP_86, FOCUS_PF10, 0 /* 0x7c-0x7f */
};
+#endif
+#ifdef KBD_IS_IBM_AS400
+static unsigned char high_keys[128 - SC_LIM] = {
+ FOCUS_PF2, FOCUS_PF3, FOCUS_PF4, FOCUS_PF5, FOCUS_PF6,
+ FOCUS_PF7, FOCUS_PF8, /* 0x59-0x5f */
+ IBM_PF9, IBM_PF10, IBM_PF11, IBM_PF12,
+ IBM_PF13, IBM_PF14, IBM_PF15, IBM_PF16, /* 0x60-0x67 */
+ IBM_PF17, IBM_PF18, IBM_PF19, IBM_PF20, IBM_PF21,
+ IBM_PF22, IBM_PF23, E0_PGUP, /* 0x68-0x6f */
+ E0_GR, E0_RCTRL, E0_RALT, 0, E0_SIGN, 0, IBM_PF24, E0_LINE, /* 0x70-0x77 */
+ E0_UP, E0_DEL, E0_END, E0_INS, /* 0x78-0x7b */
+ 0, E0_RIGHT, E0_PGDN, E0_HOME /* 0x7c-0x7f */
+};
+#endif
/* BTC */
#define E0_MACRO 112
--------------------------------schnipp-----------------------------------
This is an explaining README. ( README.AS400 )
--------------------------------schnipp-----------------------------------
Connecting and using a non standard IBM keyboard
by
Edward von Flottwell
edward@mudhoney.mitropa.com
If you would like to use an old IBM 122-key AS400 Terminal keyboard with Linux,
you should to do some small things:
1. Get your 'new' keyboard from a recycling company.
If you haven't done this already :-)
2. Solder a new 5pin DIN Connector instead of the RJ/??? Plug to the wire.
3. Patch the kernel and build an new one.
4. Load a new keymap and fit it to your needs.
I hope you managed the first step - so I'll continue with the second one:
Get a keyboard connector from your nearest electronic-shop, cut off the
original plug and you will hopefully find 4 colored wires: black, red,
yellow and white. Connect them in the following way with the DIN Plug:
Wire Signal DIN ___
Black +5V 4 / 3 \ Soldering
White GND 2 (2 4) View
Red Data 3 \1^5/
Yellow Clock 1
BUT BE VERY CAREFUL!!! Connecting the wrong signals can damage or blow up
your keyboard or your mainboard! The table above comes with NO warranty,
because I don't believe IBM always use the same type of cable :-}
You should open the keyboard and trace the wires to find the matching out.
And you should consult your mainboard for the keyboard-plug layout!
Now you're ready to switch on the computer... Some mainboard bioses will
produce a keyboard error. You can ignore this :-) BTW the F1 key is the
very left of the function-key group near the tabulator key.
O.K., now you can try to type something, e.g. LILO: linux :-)
You will find out that some keys are swapped, others are dead. To make all
of the keys work apply the kernel-patch to
/usr/src/linux/drivers/char/keyboard.c and comment the lines with
/* #define KBD_IS_FOCUS_9000 */
/* #define KBD_IS_IBM_AS400 */
out. Recompile and install the new kernel.
Now you need the last missing part: the keymap. At the end of this README
you will find an example for German users. How to make it fit to your
national keyboard is explained in the Keystroke-HOWTO. Most other questions
about keymaps, scancodes,... are explained there, too.
I would also suggest you read the manpages of showkey and loadkeys.
Don't forget to load the keymap every time you boot,
I prefer the rc.local shellscript doing this for me :-)
The keymap:
#
# File: AS400.map
#
keycode 0 =
keycode 1 = Escape Escape
alt keycode 1 = Meta_Escape
shift alt keycode 1 = Meta_Escape
keycode 2 = one exclam
alt keycode 2 = Meta_one
shift alt keycode 2 = Meta_exclam
keycode 3 = two quotedbl twosuperior
control keycode 3 = nul
alt keycode 3 = Meta_two
shift alt keycode 3 = Meta_quotedbl
keycode 4 = three section threesuperior
control keycode 4 = Escape
alt keycode 4 = Meta_three
keycode 5 = four dollar dollar
control keycode 5 = Control_backslash
alt keycode 5 = Meta_four
shift alt keycode 5 = Meta_dollar
keycode 6 = five percent
control keycode 6 = Control_bracketright
alt keycode 6 = Meta_five
shift alt keycode 6 = Meta_percent
keycode 7 = six ampersand
control keycode 7 = Control_asciicircum
alt keycode 7 = Meta_six
shift alt keycode 7 = Meta_ampersand
keycode 8 = seven slash braceleft
control keycode 8 = Control_underscore
alt keycode 8 = Meta_seven
shift alt keycode 8 = Meta_slash
keycode 9 = eight parenleft bracketleft
control keycode 9 = Delete
alt keycode 9 = Meta_eight
shift alt keycode 9 = Meta_parenleft
keycode 10 = nine parenright bracketright
alt keycode 10 = Meta_nine
control altgr keycode 10 = Control_bracketright
shift alt keycode 10 = Meta_parenright
keycode 11 = zero equal braceright
alt keycode 11 = Meta_zero
shift alt keycode 11 = Meta_equal
keycode 12 = ssharp question backslash
control keycode 12 = Control_underscore
alt keycode 12 = Meta_minus
control altgr keycode 12 = Control_backslash
shift alt keycode 12 = Meta_question
alt altgr keycode 12 = Meta_backslash
keycode 13 = apostrophe grave
alt keycode 13 = Meta_equal
shift alt keycode 13 = Meta_grave
keycode 14 = Delete Delete
alt keycode 14 = Meta_Delete
keycode 15 = Tab Tab
alt keycode 15 = Meta_Tab
keycode 16 = q
altgr keycode 16 = at
control keycode 16 = Control_q
alt keycode 16 = Meta_q
shift alt keycode 16 = Meta_Q
altgr alt keycode 16 = Meta_at
keycode 17 = w
control keycode 17 = Control_w
alt keycode 17 = Meta_w
shift alt keycode 17 = Meta_W
keycode 18 = e
control keycode 18 = Control_e
alt keycode 18 = Meta_e
shift alt keycode 18 = Meta_E
keycode 19 = r
control keycode 19 = Control_r
alt keycode 19 = Meta_r
shift alt keycode 19 = Meta_R
keycode 20 = t
control keycode 20 = Control_t
alt keycode 20 = Meta_t
shift alt keycode 20 = Meta_T
keycode 21 = z
control keycode 21 = Control_z
alt keycode 21 = Meta_z
shift alt keycode 21 = Meta_Z
keycode 22 = u
control keycode 22 = Control_u
alt keycode 22 = Meta_u
shift alt keycode 22 = Meta_U
keycode 23 = i
alt keycode 23 = Meta_i
shift alt keycode 23 = Meta_I
keycode 24 = o
control keycode 24 = Control_o
alt keycode 24 = Meta_o
shift alt keycode 24 = Meta_O
keycode 25 = p
control keycode 25 = Control_p
alt keycode 25 = Meta_p
shift alt keycode 25 = Meta_P
keycode 26 = +udiaeresis +Udiaeresis
control keycode 26 = Escape
alt keycode 26 = Meta_bracketleft
shift alt keycode 26 = Meta_braceleft
keycode 27 = plus asterisk asciitilde
control keycode 27 = Control_bracketright
alt keycode 27 = Meta_bracketright
shift alt keycode 27 = Meta_braceright
keycode 28 = Return
alt keycode 28 = 0x080d
keycode 29 = Caps_Lock
keycode 30 = a
control keycode 30 = Control_a
alt keycode 30 = Meta_a
shift alt keycode 30 = Meta_A
keycode 31 = s
control keycode 31 = Control_s
alt keycode 31 = Meta_s
shift alt keycode 31 = Meta_S
keycode 32 = d
control keycode 32 = Control_d
alt keycode 32 = Meta_d
shift alt keycode 32 = Meta_D
keycode 33 = f
control keycode 33 = Control_f
alt keycode 33 = Meta_f
shift alt keycode 33 = Meta_F
keycode 34 = g
control keycode 34 = Control_g
alt keycode 34 = Meta_g
shift alt keycode 34 = Meta_G
keycode 35 = h
alt keycode 35 = Meta_h
shift alt keycode 35 = Meta_H
keycode 36 = j
alt keycode 36 = Meta_j
shift alt keycode 36 = Meta_J
keycode 37 = k
control keycode 37 = Control_k
alt keycode 37 = Meta_k
shift alt keycode 37 = Meta_K
keycode 38 = l
control keycode 38 = Control_l
alt keycode 38 = Meta_l
shift alt keycode 38 = Meta_L
keycode 39 = +odiaeresis +Odiaeresis
alt keycode 39 = Meta_semicolon
shift alt keycode 39 = Meta_colon
shift keycode 39 = Odiaeresis
keycode 40 = +adiaeresis +Adiaeresis
control keycode 40 = Control_g
alt keycode 40 = Meta_apostrophe
shift alt keycode 40 = Meta_quotedbl
keycode 41 = asciicircum degree
control keycode 41 = nul
alt keycode 41 = Meta_grave
shift alt keycode 41 = Meta_asciitilde
keycode 42 = Shift
keycode 43 = numbersign apostrophe
control keycode 43 = Control_backslash
alt keycode 43 = Meta_backslash
shift alt keycode 43 = Meta_apostrophe
keycode 44 = y
control keycode 44 = Control_y
alt keycode 44 = Meta_y
shift alt keycode 44 = Meta_Y
keycode 45 = x
control keycode 45 = Control_x
alt keycode 45 = Meta_x
shift alt keycode 45 = Meta_X
keycode 46 = c
control keycode 46 = Control_c
alt keycode 46 = Meta_c
shift alt keycode 46 = Meta_C
keycode 47 = v
control keycode 47 = Control_v
alt keycode 47 = Meta_v
shift alt keycode 47 = Meta_V
keycode 48 = b
control keycode 48 = Control_b
alt keycode 48 = Meta_b
shift alt keycode 48 = Meta_B
keycode 49 = n
control keycode 49 = Control_n
alt keycode 49 = Meta_n
shift alt keycode 49 = Meta_N
keycode 50 = m
altgr keycode 50 = mu
control keycode 50 = Control_m
alt keycode 50 = Meta_m
shift alt keycode 50 = Meta_M
keycode 51 = comma semicolon
alt keycode 51 = Meta_comma
alt shift keycode 51 = Meta_semicolon
keycode 52 = period colon
alt keycode 52 = Meta_period
alt shift keycode 21 = Meta_colon
keycode 53 = minus underscore
control keycode 53 = Delete
alt keycode 53 = Meta_slash
shift control keycode 53 = Control_underscore
keycode 54 = Shift
keycode 55 = KP_Multiply
keycode 56 = Control
keycode 57 = space space
control keycode 57 = nul
alt keycode 57 = Meta_space
keycode 58 = Control
keycode 59 = Escape Escape
alt keycode 1 = Meta_Escape
shift alt keycode 1 = Meta_Escape
keycode 60 = Control_z
keycode 61 =
keycode 62 = Last_Console
keycode 63 = Control_a
keycode 64 = Up
keycode 65 = Control_backslash
control keycode 99 = Control_backslash
alt keycode 99 = Control_backslash
keycode 66 = Control_c
keycode 67 = Control_q
keycode 68 = Control_s
keycode 69 = Num_Lock
keycode 70 = Control_r
keycode 71 = KP_7
alt keycode 71 = Ascii_7
keycode 72 = KP_8
alt keycode 72 = Ascii_8
keycode 73 = KP_9
alt keycode 73 = Ascii_9
keycode 74 = KP_Subtract
keycode 75 = KP_4
alt keycode 75 = Ascii_4
keycode 76 = KP_5
alt keycode 76 = Ascii_5
keycode 77 = KP_6
alt keycode 77 = Ascii_6
keycode 78 = KP_Enter
keycode 79 = KP_1
alt keycode 79 = Ascii_1
keycode 80 = KP_2
alt keycode 80 = Ascii_2
keycode 81 = KP_3
alt keycode 81 = Ascii_3
keycode 82 = KP_0
alt keycode 82 = Ascii_0
keycode 83 = KP_Comma
altgr control keycode 83 = Boot
control alt keycode 83 = Boot
keycode 84 = slash
keycode 85 = Down
keycode 86 = Left
keycode 87 = F11 F11 Console_23
control keycode 87 = F11
alt keycode 87 = Console_11
control alt keycode 87 = Console_11
keycode 88 = F1 F11 Console_13
control keycode 88 = F1
alt keycode 88 = Console_1
control alt keycode 88 = Console_1
keycode 89 = F2 F12 Console_14
control keycode 89 = F2
alt keycode 89 = Console_2
control alt keycode 89 = Console_2
keycode 90 = F3 F13 Console_15
control keycode 90 = F3
alt keycode 90 = Console_3
control alt keycode 90 = Console_3
keycode 91 = F4 F14 Console_16
control keycode 91 = F4
alt keycode 91 = Console_4
control alt keycode 91 = Console_4
keycode 92 = F5 F15 Console_17
control keycode 92 = F5
alt keycode 92 = Console_5
control alt keycode 92 = Console_5
keycode 93 = F6 F16 Console_18
control keycode 93 = F6
alt keycode 93 = Console_6
control alt keycode 93 = Console_6
keycode 94 = F7 F17 Console_19
control keycode 94 = F7
alt keycode 94 = Console_7
control alt keycode 94 = Console_7
keycode 95 = F8 F18 Console_20
control keycode 95 = F8
alt keycode 95 = Console_8
control alt keycode 95 = Console_8
keycode 96 = KP_Enter
keycode 97 = Alt
keycode 98 = KP_Divide
keycode 99 =
keycode 100 = AltGr
keycode 101 = Break
keycode 102 = Find
keycode 103 = Up
keycode 104 = Prior
shift keycode 104 = Scroll_Backward
keycode 105 = less greater bar
alt keycode 86 = Meta_less
shift alt keycode 86 = Meta_greater
altgr alt keycode 86 = Meta_bar
keycode 106 = Right
keycode 107 = Select
keycode 108 = F25
keycode 109 = Next
shift keycode 109 = Scroll_Forward
keycode 110 = Insert
keycode 111 = Remove
altgr control keycode 111 = Boot
control alt keycode 111 = Boot
keycode 112 = F9
keycode 113 = F10
keycode 114 = F11
keycode 115 = F12
keycode 116 = Console_1
keycode 117 = Console_2
keycode 118 = Console_3
keycode 119 =
keycode 120 = Console_4
keycode 121 = Console_5
keycode 122 = Console_6
keycode 123 = Console_7
keycode 124 = Console_8
keycode 125 = F21
keycode 126 = F22
keycode 127 = F23
# mom
string F1 = "\033[[A"
string F2 = "\033[[B"
string F3 = "\033[[C"
string F4 = "\033[[D"
string F5 = "\033[[E"
string F6 = "\033[17~"
string F7 = "\033[18~"
string F8 = "\033[19~"
string F9 = "\033[20~"
string F10 = "\033[21~"
string F11 = "\033[23~"
string F12 = "\033[24~"
string F13 = "\033[25~"
string F14 = "\033[26~"
string F15 = "\033[28~"
string F16 = "\033[29~"
string F17 = "\033[31~"
string F18 = "\033[32~"
string F19 = "\033[33~"
string F20 = "\033[34~"
string Find = "\033[1~"
string Insert = "\033[2~"
string Remove = "\033[3~"
string Select = "\033[4~"
string Prior = "\033[5~"
string Next = "\033[6~"
string F21 = ""
string F22 = ""
string F23 = ""
string F24 = ""
string F25 = ""
string F26 = ""